#include <stdio.h>

// 前置声明确保函数可见性
int f(int);
int g(int);

int main() {
    int sum1 = 0, sum2 = 0;
    const int n = 100;

    // 第一个目标区域：计算sum1
    #pragma omp target teams distribute reduction(+:sum1)
    for (int i = 0; i < n; i++) {
        sum1 += f(i);
    }

    // 第二个目标区域：计算sum2（依赖sum1）
    #pragma omp target teams distribute reduction(+:sum2)
    for (int i = 0; i < n; i++) {
        sum2 += g(i) * sum1;
    }

    printf("sum1 = %d, sum2 = %d\n", sum1, sum2);
    // OUTPUT: sum1 = 9900, sum2 = 147015000
    return 0;
}

// 函数定义
int f(int res) { return res * 2; }
int g(int res) { return res * 3; }